package com.otv.model;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;



/**
 * Class Pieza.
 */
@Entity
@Table (name="re_pieza")

public class Pieza {
	
	/** El/la id. */
	@Id
	@Column(name="pi_id_pieza", unique=true, nullable=false)
	private int id;
	
	/** El/la alojamiento. */
	@ManyToOne (fetch = FetchType.LAZY)
	@JoinColumn (name="al_id_alojamiento", nullable = true)
	private Alojamiento alojamiento;

	/** El/la arriendos. */
	@OneToMany (fetch = FetchType.LAZY, mappedBy="pieza")
	private List<Arriendo> arriendos;
	
	/** El/la nombre. */
	@Column(name="pi_nombre", unique=false, nullable=false)
	private String nombre;
	
	/** El/la valor. */
	@Column(name="pi_valor", unique=false, nullable=false)
	private double valor;
	
	/** El/la disponible. */
	@Column(name="pi_disponibilidad", unique=false, nullable=false)
	private boolean disponible;
	
	/** El/la descripcion. */
	@Column(name="pi_descripcion", unique=false, nullable=true)
	private String descripcion;
	
	/** El/la Privilegios. */
	@ManyToMany(cascade = {CascadeType.ALL})
	@JoinTable(name="re_pieza_privilegio", joinColumns={@JoinColumn(name="pr_id_privilegio")},
	inverseJoinColumns={@JoinColumn(name="pi_id_pieza")})
	private List<Privilegio> privilegios;
	
	/** El/la Servicios. */
	@ManyToMany(cascade = {CascadeType.ALL})
	@JoinTable(name="re_pieza_servicio", joinColumns={@JoinColumn(name="se_id_servicio")},
	inverseJoinColumns={@JoinColumn(name="pi_id_pieza")})
	private List<Servicio> servicios;

	/**
	 * Devuelve un(a) id.
	 *
	 * @return El/la id
	 */
	public int getId() {
		return id;
	}

	/**
	 * Asigna el/la id.
	 *
	 * @param id un(a) nuevo(a) id
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * Devuelve un(a) alojamiento.
	 *
	 * @return El/la alojamiento
	 */
	public Alojamiento getAlojamiento() {
		return alojamiento;
	}

	/**
	 * Asigna el/la alojamiento.
	 *
	 * @param alojamiento un(a) nuevo(a) alojamiento
	 */
	public void setAlojamiento(Alojamiento alojamiento) {
		this.alojamiento = alojamiento;
	}

	/**
	 * Devuelve un(a) nombre.
	 *
	 * @return El/la nombre
	 */
	public String getNombre() {
		return nombre;
	}

	/**
	 * Asigna el/la nombre.
	 *
	 * @param nombre un(a) nuevo(a) nombre
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	/**
	 * Devuelve un(a) valor.
	 *
	 * @return El/la valor
	 */
	public double getValor() {
		return valor;
	}

	/**
	 * Asigna el/la valor.
	 *
	 * @param valor un(a) nuevo(a) valor
	 */
	public void setValor(double valor) {
		this.valor = valor;
	}

	/**
	 * Comprueba si es disponible.
	 *
	 * @return true, si es disponible
	 */
	public boolean isDisponible() {
		return disponible;
	}

	/**
	 * Asigna el/la disponible.
	 *
	 * @param disponible un(a) nuevo(a) disponible
	 */
	public void setDisponible(boolean disponible) {
		this.disponible = disponible;
	}

	/**
	 * Devuelve un(a) descripcion.
	 *
	 * @return El/la descripcion
	 */
	public String getDescripcion() {
		return descripcion;
	}

	/**
	 * Asigna el/la descripcion.
	 *
	 * @param descripcion un(a) nuevo(a) descripcion
	 */
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	


	/**
	 * Devuelve un(a) arriendos.
	 *
	 * @return El/la arriendos
	 */
	public List<Arriendo> getArriendos() {
		return arriendos;
	}

	/**
	 * Asigna el/la arriendos.
	 *
	 * @param arriendos un(a) nuevo(a) arriendos
	 */
	public void setArriendos(List<Arriendo> arriendos) {
		this.arriendos = arriendos;
	}

	/**
	 * Devuelve un(a) privilegios.
	 *
	 * @return El/la privilegios
	 */
	public List<Privilegio> getPrivilegios() {
		return privilegios;
	}

	/**
	 * Asigna el/la privilegios.
	 *
	 * @param privilegios un(a) nuevo(a) privilegios
	 */
	public void setPrivilegios(List<Privilegio> privilegios) {
		this.privilegios = privilegios;
	}

	/**
	 * Devuelve un(a) servicios.
	 *
	 * @return El/la servicios
	 */
	public List<Servicio> getServicios() {
		return servicios;
	}

	/**
	 * Asigna el/la servicios.
	 *
	 * @param servicios un(a) nuevo(a) servicios
	 */
	public void setServicios(List<Servicio> servicios) {
		this.servicios = servicios;
	}

}
